package com.itheima.threadsafetysynchronizedcode;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Account {

    private String cardId;      //卡号
    private double money;       //账户余额

    public void drawMoney(double money) {

        //拿到取钱人的名字
        String name = Thread.currentThread().getName();
        System.out.println(name + "取钱中...");

        //锁对象：要求是唯一的
        //建议使用共享资源作为锁对象，避免死锁。
        //      1.对于实例方法建议使用this作为锁对象
        //      2.对于静态方法建议使用字节码对象（类名.class）作为锁对象
        synchronized (this) {
            //先判断余额是否足够
            if (this.money >= money) {
                //余额足够，取钱
                System.out.println(name + "取钱成功，本次取钱金额为：" + money);
                //更新余额
                this.money -= money;
                System.out.println(name + "本次取钱后，余额为：" + this.money);
            } else {
                //余额不足，取钱失败
                System.out.println(name + "取钱失败，余额不足！");
                System.out.println("当前余额为：" + this.money);
            }
        }

    }
}
